package com.gitee.chessboard.manager;

import com.gitee.chessboard.model.dictionary.Dictionary;
import com.gitee.chessboard.model.word.Word;
import com.gitee.chessboard.parser.DictionaryParser;
import com.gitee.chessboard.scan.ScanManager;

import java.util.List;

/**
 * 字典管理器
 *
 * @author 敲代码的旺财
 * @date 2021/11/18 9:27
 */
public interface DictionaryManager {
    /**
     * 初始化
     */
    void init();

    /**
     * 设置扫描器
     */
    void setScanManager(ScanManager scanManager);

    /**
     * 保存字典
     *
     * @param dictionary 字典
     */
    void save(Dictionary dictionary);

    /**
     * 保存词
     *
     * @param word 词
     */
    void save(Word word);

    /**
     * 删除字典
     *
     * @param dictionary 字典
     */
    void del(Dictionary dictionary);

    /**
     * 删除词
     *
     * @param word 词
     */
    void del(Word word);

    /**
     * 获取一个全新的词
     */
    Word getNewWord();

    /**
     * 获取一个全新的字典
     */
    Dictionary getNewDictionary(List<Word> words);

    /**
     * 获取一个全新的字典
     */
    Dictionary getNewDictionary();

    /**
     * 获取所有字典
     *
     * @return 字典列表
     */
    List<Dictionary> get();

    /**
     * 根据字典编码获取字典
     *
     * @param dictionaryCode 字典编码
     * @return 字典
     */
    Dictionary get(String dictionaryCode);

    /**
     * 根据词获取字典
     *
     * @param word 词
     * @return 字典
     */
    Dictionary getByWord(Word word);

    /**
     * 获取枚举处理器
     */
    DictionaryParser getEnumDictionaryParser();

    /**
     * 设置枚举处理器
     */
    void setEnumDictionaryParser(DictionaryParser enumDictionaryParser);

    /**
     * 获取常量处理器
     */
    DictionaryParser getConstantDictionaryParser();

    /**
     * 设置常量处理器
     */
    void setConstantDictionaryParser(DictionaryParser constantDictionaryParser);

    /**
     * 获取枚举
     */
    List<Class<?>> getEnums();

    /**
     * 设置枚举
     *
     * @param enums 枚举集合
     */
    void setEnums(List<Class<?>> enums);

    /**
     * 获取常量
     */
    List<Class<?>> getConstant();

    /**
     * 设置常量
     *
     * @param constant 常量集合
     */
    void setConstant(List<Class<?>> constant);
}
